//package info.wangyuan.agent.service.conversation;
//
//import dev.langchain4j.model.chat.response.ChatResponse;
//import dev.langchain4j.model.chat.response.PartialThinking;
//import dev.langchain4j.rag.content.Content;
//import dev.langchain4j.service.TokenStream;
//import dev.langchain4j.service.tool.BeforeToolExecution;
//import dev.langchain4j.service.tool.ToolExecution;
//import lombok.extern.slf4j.Slf4j;
//
//import java.util.List;
//import java.util.concurrent.atomic.AtomicBoolean;
//import java.util.function.Consumer;
//
///**
// * TokenStream 包装器，支持 stop / cancel，增强回调处理
// *
// * @author Albert
// * @since 2025-09-13 12:09:59
// */
//
//@Slf4j
//public class TokenStreamWrapper implements TokenStream {
//
//    private final TokenStream tokenStream;
//    private final AtomicBoolean cancelled = new AtomicBoolean(false);
//
//    public TokenStreamWrapper(TokenStream tokenStream) {
//        this.tokenStream = tokenStream;
//    }
//
//    /**
//     * 请求停止
//     */
//    public void stop() {
//        cancelled.set(true);
//        log.info("TokenStream 已请求停止");
//    }
//
//    public boolean isActive() {
//        return !cancelled.get();
//    }
//
//    @Override
//    public TokenStream onPartialResponse(Consumer<String> consumer) {
//        tokenStream.onPartialResponse(fragment -> {
//            if (isActive()) {
//                consumer.accept(fragment);
//            } else {
//                log.debug("已取消，丢弃回答片段: {}", fragment);
//            }
//        });
//        return this;
//    }
//
//    @Override
//    public TokenStream onPartialThinking(Consumer<PartialThinking> consumer) {
//        tokenStream.onPartialThinking(thinking -> {
//            if (isActive()) {
//                consumer.accept(thinking);
//            } else {
//                log.debug("已取消，丢弃思考片段");
//            }
//        });
//        return this;
//    }
//
//    @Override
//    public TokenStream onRetrieved(Consumer<List<Content>> consumer) {
//        tokenStream.onRetrieved(content -> {
//            if (isActive()) {
//                consumer.accept(content);
//            }
//        });
//        return this;
//    }
//
//    @Override
//    public TokenStream onIntermediateResponse(Consumer<ChatResponse> consumer) {
//        tokenStream.onIntermediateResponse(resp -> {
//            if (isActive()) {
//                consumer.accept(resp);
//            }
//        });
//        return this;
//    }
//
//    @Override
//    public TokenStream beforeToolExecution(Consumer<BeforeToolExecution> consumer) {
//        tokenStream.beforeToolExecution(execution -> {
//            if (isActive()) {
//                consumer.accept(execution);
//            }
//        });
//        return this;
//    }
//
//    @Override
//    public TokenStream onToolExecuted(Consumer<ToolExecution> consumer) {
//        tokenStream.onToolExecuted(exec -> {
//            if (isActive()) {
//                consumer.accept(exec);
//            }
//        });
//        return this;
//    }
//
//    @Override
//    public TokenStream onCompleteResponse(Consumer<ChatResponse> consumer) {
//        tokenStream.onCompleteResponse(resp -> {
//            if (isActive()) {
//                consumer.accept(resp);
//            }
//        });
//        return this;
//    }
//
//    @Override
//    public TokenStream onError(Consumer<Throwable> consumer) {
//        tokenStream.onError(err -> {
//            if (isActive()) {
//                consumer.accept(err);
//            } else {
//                log.info("已取消，忽略异常: {}", err.getMessage());
//            }
//        });
//        return this;
//    }
//
//    @Override
//    public TokenStream ignoreErrors() {
//        tokenStream.ignoreErrors();
//        return this;
//    }
//
//    /**
//     * 启动 TokenStream
//     */
//    @Override
//    public void start() {
//        if (isActive()) {
//            tokenStream.start();
//            log.info("TokenStream 已启动");
//        } else {
//            log.warn("已取消，不会启动流式任务");
//        }
//    }
//}
